Computer systems include various components to process and communicate data. Typical systems include one or multiple processors, each of which may include multiple cores, along with associated memories, input/output (I/O) devices and other such components. To improve computation efficiencies, computation accelerators, special-purpose I/O devices and other such specialized units may be provided via one or more specialized components, referred to generically as helper units. However, inefficiencies may occur in using such helper units, as in a typical computing environment that implements a general-purpose processor and an industry-standard operating system (OS) environment, a software stack can impede efficient usage. That is, in a typical OS environment, system software is isolated from application software via different privilege levels, and operations in each of these different privilege levels are subject to OS context save and restore operations, among other limitations. Further, helper units typically lack the ability to handle processing of exceptions and faults that allow robust handling of certain events during execution.
Classic examples of a computation accelerator are coprocessors such as math coprocessors like so-called x87 floating point coprocessors for early Intel® Architecture (IA)-32 processors. Typically, such coprocessors are coupled to a main processor (e.g., a central processing unit (CPU)) via a coprocessor interface, which is of a common instruction set architecture (ISA) as the main processor. More recently, separate resources having different ISAs have appeared in systems.
In traditional systems, a privilege level (or ring-level) is primarily used to distinguish or isolate, and thus protect resources between a supervisor program (e.g., an OS kernel at Ring-0) and an application program (e.g. regular applications at Ring-3). Since the OS has system level access privilege to system-level resources, application software cannot directly access these resources. Through system services (e.g. explicit syscall and “implicit” page fault and structured exception handling) provided by the OS or basic input/output system (BIOS), an application can indirectly “access” some system resources through OS. However, this indirect access is time consuming and complex, and requires OS control of privilege support.